package fr.univ.lr.icone.zone;

import java.awt.Point;
import java.util.ArrayList;

import fr.univ.lr.icone.agents.Agent;
import fr.univ.lr.icone.configuration.Configuration;
import fr.univ.lr.icone.gui.GraphicUI;
import fr.univ.lr.icone.gui.event.*;

/**
 * Class Zone extends Thread
 *
 * 	//inplementé
 * Cette classe s'occupe de la symulation (correspind au controlleur dasn le modele vu/controlleur).
 * Elle contien une classe Configuration qui sera utilise pour récuperer une ArrayList d'Agents qui sera crae a partir du fichier de configuration XML.
 * Elle cré des Event qu'elle envoie a GraphicUI qui correspendent a tous les agent crée
 *
 *	//pas encore implémente
 *	Elle se chargera aussi de deplacer les agentset de les faire communiquer.
 *	Elle informera la classe GrapheUI (pour l'informer des positions et opignon des agents)grace a un system d'event
 *	De meme pour la classe Log pour qu'elle puisse enregistrer la trace de la configuration.
 *
 *	
 * 
 **/
public class Zone extends Thread {
	// -----------------VARIABLES DE CLASSES-------------------------------------
	boolean simuler, pause;
	// liste des agents
	public ArrayList<Agent> agents;// = new ArrayList<Agents>;

	// pointeur vers l'GraphicUI
	GraphicUI ihm;

	// Configuraton
	Configuration config;

	// Log
	// Log log;
	// -------------------CONSTRUCTEURS------------------------------------
	/**
	 * constructeur
	 * prend en parametre une GraphicUI et le nom du fichier de configuration
	 */
	public Zone(GraphicUI ihm , String nameConfig) {
		simuler = false;
		pause = true;
		config = new Configuration(nameConfig);
		// on récupere les agents via la class configuration
		
		this.ihm = ihm;
		//this.init();

	}

	

	// -----------------METHODES PUBLIC------------------------------------
	
	/**
	 * 
	 */
	public void run() {
		init();
	}

      
	
	// -----------------METHODES INTERNES---------------------------------------
	
	/**
	 * methode init
	 * Charge le fichier de de configuration passer en parametre du constructeur de Zonz(2ene parametre)
	 * et recupere la liste des agents
	 */
	public void init() {
		System.out.println("Zone.init()");
		
		config.loadConfiguration();
		ArrayList<Agent> agents = config.getAgentList();
		
		System.out.println(agents.size());
		
		Event eTmp;
		for(int i=0; i<agents.size(); i++)
		{
			eTmp = new Event(agents.get(i).getId(), EventType.AGENT_CREATION ,agents.get(i).getOpinion() , new Point(agents.get(i).getX() ,agents.get(i).getY()) );
			ihm.receiveEvent(eTmp);
			System.out.println("Event add to GrapgicUI"+ eTmp.toString());
		}
		System.out.println("Zone.init() ... stop");
	}

	
	public ArrayList<Agent> getAgents()
	{
		return this.agents;
	}
}

